import random
import numpy as np
from collections import Counter
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit import BasicAer, executeRandom number generation using a quantum computer is truly random, it uses superposition principle to generate real random data instead of random-looking periodic sequences.
Using quantum simulator
n = 4
trials = 512*nq = QuantumRegister(n)
c = ClassicalRegister(n)
circuit = QuantumCircuit(q, c)for j in range(n):
circuit.h(q[j])
circuit.measure(q,c)<qiskit.circuit.instructionset.InstructionSet at 0x7fc55d49b310>
circuit.draw('mpl')
job = execute(circuit, BasicAer.get_backend('qasm_simulator'), shots=trials)counts = job.result().get_counts()count_map = {}
for ct in counts:
count_map[ int(ct,2) ] = counts[ct]/8192
from qiskit.tools.visualization import plot_histogram
plot_histogram(count_map, figsize = (10,5),color=['crimson'])
Using classical numpy
They are based on deterministic, predictable algorithms and thus not secure
N = 2**n
rand_lst = []
for _ in range(trials):
rand_lst.append(np.random.randint(0, N))counter_rand = Counter(rand_lst)counter_rand_prob = {}
for key,val in counter_rand.items():
counter_rand_prob[key] = val/trialsplot_histogram(counter_rand_prob, figsize = (10, 5), color=['midnightblue'])
Huh! the distributions seem similar, what’s the hoopla about?
ok, here is a paper on random number generator https://shorturl.at/AFMQZ
They do a bunch of tests:- Restart
- Autocorrelation
- NIST statistical tests